﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using KPWeb.Class;
using KPWeb.Data;

namespace KPWeb.KartaPracy
{
    public class OsobyKartaPracy
    {
      //KARTA PRACY  
        public static bool JestKartaPracyDlaOsobyWDniu(int osobaID, DateTime kartaDzien)
        {
            using (DBContainer db = new DBContainer())
            {

                return (from wiz in db.KP_KartyPracy.Where(a => a.OsobaID == osobaID &&
                   a.DzienKartyPracy == kartaDzien && a.TypKartyPracyID == Stale.kartaPracyTypID)
                        select wiz).Count() == 1;

            }
        }

        public static vKP_KartyPracy[] GetKartaPracyDlaOsoby(int osobaID, DateTime odData, DateTime doData)
        {
            using (DBContainer db = new DBContainer())
            {

                return (from wiz in db.vKP_KartyPracy.Where(a => a.OsobaID == osobaID &&
                   DateTime.Compare(a.OdData, odData) >= 0 && DateTime.Compare(a.OdData, doData) <= 0
                   && a.TypKartyPracyID == Stale.kartaPracyTypID && a.Stan == 0).OrderBy(a => a.DzienKartyPracy)
                        select wiz).ToArray();
            }
        }



        public static vKP_KartyPracyDlaOsobJednostka[] GetKartyPracyDlaOsobJednostka(int year,int jednostkaID)
        {
            using (DBContainer db = new DBContainer())
            {
                var t = (from wiz in db.vKP_KartyPracyDlaOsobJednostka.Where(a => a.JednostkaGlownaID == jednostkaID && a.rok==year).OrderBy(a => a.NazwiskoImie).ThenBy(b => b.miesiac)
                         select wiz).ToArray();
                return t;
            }
        }   



        public int InsertUpdateKartaPracy(int osobaID, 
               DateTime odData, DateTime doData, DateTime kartaDzien, int czasWMinutach, byte stan)
        //-1 błąd zapisu
        //ID utworzonego rekordu  WyjsciaOdpracowaniaNadgodziny, 0 update
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    if (!JestKartaPracyDlaOsobyWDniu(osobaID, kartaDzien))
                    {
                        KP_KartyPracy e = new KP_KartyPracy();
                        e.OsobaID = osobaID;
                        e.TypKartyPracyID = 13;
                        e.OdData = odData;
                        e.DoData = doData;
                        e.DzienKartyPracy = kartaDzien;
                        e.CzasWMinutach = czasWMinutach;
                        e.Stan = stan;
                        e.DataUtworzenia = DateTime.Now;
                        e.active = "t";
                        db.KP_KartyPracy.AddObject(e);
                        db.SaveChanges();

                        return e.KartyPracyID;
                    }
                    else
                    {
                        var wiz = db.KP_KartyPracy.Where(a => a.OsobaID == osobaID &&
                           a.DzienKartyPracy == kartaDzien && a.TypKartyPracyID == Stale.kartaPracyTypID).Single();

                        wiz.OdData = odData;
                        wiz.DoData = doData;
                        wiz.CzasWMinutach = czasWMinutach;
                        wiz.DataUtworzenia = DateTime.Now;
                      
                        db.SaveChanges();
                    }
                    return 0;
                }
                catch (Exception e)
                {
                    return -1;
                }

            }
        }
        public int InsertKartaPracy(int osobaID, byte typKartyPracyID, DateTime odData, DateTime doData,
                    DateTime kartaDzien, int czasWMinutach, byte stan)
        //-1 błąd zapisu
        //ID utworzonego rekordu  KartyPracy, 0 update
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    KP_KartyPracy e = new KP_KartyPracy();
                    e.OsobaID = osobaID;
                    e.TypKartyPracyID = typKartyPracyID;
                    e.OdData = odData;
                    e.DoData = doData;
                    e.DzienKartyPracy = kartaDzien;
                    e.CzasWMinutach = czasWMinutach;
                    e.Stan = stan;
                    e.DataUtworzenia = DateTime.Now;
                    e.active = "t";
                    db.KP_KartyPracy.AddObject(e);
                    db.SaveChanges();

                    return e.KartyPracyID;
                }
                catch (Exception e)
                {
                    return -1;
                }

            }
        }

        public static int DeleteKartaPracy(int osobaID, DateTime kartaOd, DateTime kartaDo)
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    var items = db.KP_KartyPracy.Where(a => a.OsobaID == osobaID && a.TypKartyPracyID == Stale.kartaPracyTypID &&
                        a.DzienKartyPracy >= kartaOd && a.DzienKartyPracy <= kartaDo);

                    foreach (KP_KartyPracy item in items)
                    {
                        db.KP_KartyPracy.DeleteObject(item);

                    }
                    db.SaveChanges();

                    return 0;
                }
                catch (Exception e)
                {
                    return -1;
                }


            }
        }
        public static int DeleteKartaPracyDzien(int osobaID, DateTime kartaDzien)
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    var item = db.KP_KartyPracy.Where(a => a.OsobaID == osobaID && a.TypKartyPracyID == Stale.kartaPracyTypID &&
                        a.DzienKartyPracy == kartaDzien).Single();

                    db.KP_KartyPracy.DeleteObject(item);

                    db.SaveChanges();

                    return 0;
                }
                catch (Exception e)
                {
                    return -1;
                }


            }
        }

        public static int UpdateStanKartyPracy(int osobaID, DateTime kartaOd, DateTime kartaDo, byte stan1, byte stan2)
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    var wiz = db.KP_KartyPracy.Where(a => a.OsobaID == osobaID && a.Stan == stan1 &&
                                            a.active == "t" && a.DzienKartyPracy >= kartaOd && a.DzienKartyPracy <= kartaDo).ToArray();
                    foreach (KP_KartyPracy e in wiz)
                    {
                        e.Stan = stan2;
                    }

                    db.SaveChanges();
                    return 0;
                }
                catch (Exception e)
                {
                    return -1;
                }
            }
        }

    }
}